/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sistemaacademico;

import java.io.Serializable;

/**
 *
 * @author Mariana e Thiago
 */
public class Lista implements Serializable {

	private Nodo primeiro;
	private Nodo ultimo;
	private int contagem;

	public Lista() {

		this.primeiro = null;
		this.ultimo = null;
		this.contagem = 0;
	}

	public Nodo getPrimeiro() {
		return primeiro;
	}

	public void setPrimeiro(Nodo primeiro) {
		this.primeiro = primeiro;
	}

	public Nodo getUltimo() {
		return ultimo;
	}

	public void setUltimo(Nodo ultimo) {
		this.ultimo = ultimo;
	}

	public void adicionar(Nodo nodo) {
		if (this.primeiro == null) {
			this.primeiro = nodo;
			this.ultimo = nodo;
		} else {
			this.ultimo.setProximo(nodo);
			nodo.setAnterior(this.ultimo);
			this.ultimo = nodo;


		}
		contagem ++;
	}

	public void remover(Nodo nodo) {
		Nodo nodoI = this.primeiro;
		if (nodoI == nodo) {
			Nodo nodoP = nodo.getProximo();
			nodoP.setAnterior(null);
			this.primeiro = nodo;
			nodoI = null;
		} else if (nodo == this.ultimo) {
			Nodo nodoU = this.ultimo.getAnterior();
			nodoU.setProximo(null);
			this.ultimo = nodoU;
		} else {
			while (nodoI.getProximo() != null) {
				nodoI = nodoI.getProximo();
				if (nodoI == nodo) {
					Nodo nodoA = nodo.getAnterior();
					nodoA.setProximo(nodo.getProximo());
					Nodo nodoP = nodo.getProximo();
					nodoP.setAnterior(nodo.getAnterior());
				}
			}
		}
		
		contagem --;


	}
	/**
	 * Envia a matricula do estudante e retorna o nó que ele se encontra.
	 * @param codigo
	 * @return 
	 */
	public Nodo busca(int codigo) {
		Nodo nodoP = this.primeiro;
		Nodo nodoU = this.ultimo;
		if (nodoP.getNodo().getMatricula() == codigo) {
			return nodoP;
		} else if (nodoU.getNodo().getMatricula() == codigo) {
			return nodoU;
		} else {
			int i = 0;
			while (nodoP.getProximo() != null && nodoU.getAnterior() != null && i < (this.contagem / 2)) {
				nodoP = nodoP.getProximo();
				nodoU = nodoU.getAnterior();
				if (nodoP.getNodo().getMatricula() == codigo){
					return nodoP;
				}
				if (nodoU.getNodo().getMatricula() == codigo){
					return nodoU;
				}
				i++;
			}
		}

		return null;

	}

	public void imprimir() {
		Nodo nodoI = this.primeiro;
		System.out.println(this.primeiro.getNodo().getNome());
		while (nodoI.getProximo() != null) {
			nodoI = nodoI.getProximo();
			System.out.println(nodoI.getNodo().getNome());
		}

	}
}
